// PROGRAMA : SCRP1620
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// BIBLIOTECA : SISP
// CLIENTE : GEJUSPC - GERENCIA DE ESTADO DA JUSTICA, SEGURANCA
// PUBLICA E CIDADANIA / INSTITUTO DE IDENT.
// OBJETIVO : INCLUSAO DAS FICHAS DE INDICE CRIMINAL
// PROGRAMADOR: JOSE ANTONIO COELHO
// DATA : 29 DE JULHO DE 1997
// ALTERACAO : 04/02/1998 POR SOLON MIRANDA
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Scrr1500Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Relatorio;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.model.SicSenha;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrp1620 OBJETIVO : INCLUSAO DAS FICHAS DE INDICE CRIMINAL *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/scrp1620")
public class Scrp1620 {
	// Views utilizadas
	SicCadastro criminalView = new SicCadastro();
	SicSenha senhaView = new SicSenha();
	// Telas/relatorios utilizados
	Scrr1500Report report;
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Scrp1620 scrp1620Anterior;
	String faseproc = "0";
	private int jMatric = 0;
	private int jQuant = 0;
	private int jTotal = 0;
	private int jIndex = 0;
	Integer jDataIni = 0;

	Relatorio relatorio;

	private Relatorio preMapas() {
		primeiraVez = true;
		relatorio = new Relatorio(primeiraVez, sessao);
		relatorio.setNavegar("../scrp1620/executar");
		relatorio.setTitulo("FICHA INDICE CRIMINAL");
		result.include("relatorio", relatorio);
		sessao.setAtributo("SCRP1620", this);
		relatorio.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		faseproc = "0";
		return relatorio;
	}

	public Scrp1620(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Relatorio relatorio) {
		try {
			return main(relatorio);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}

	}

	public InputStreamDownload main(Relatorio prelatorio) throws JRException, ParseException, FileNotFoundException {

		if (prelatorio == null) {
			sessao.setAtributo("jDataIni", jDataIni);
			preMapas();

			return null;
		} else {
			restaurarEstados(prelatorio);
		}

		if (faseproc == null) {

			preMapas();

			return null;
		}
		jDataIni = (Integer) sessao.getAtributo("jDataIni");
		sessao.getScrg001().setWVltw(15);
		// RELATORIO 1 PS=60 LS=80
		report = new Scrr1500Report();
		report.setPageSize(60);
		report.setLineSize(80);
		// Par�grafo: fd33()
		report.setJdiaini((int) UtilBean.extraiDigitos(jDataIni, 8, 6, 2));
		report.setJmesini((int) UtilBean.extraiDigitos(jDataIni, 8, 4, 2));
		report.setJanoini((int) UtilBean.extraiDigitos(jDataIni, 8, 0, 4));
		while (criminalView.pesquisaDataDocAtuStatusRegDifer(jDataIni, 5)) {
			// 155
			// SORT MATFUNC-ATU USING DATDOC-ATU HORA-ATU AT BREAK MATFUNC-ATU
			if (criminalView.quebraMatfuncatu()) {
				jIndex += 1;
				report.setJmatricula(jIndex, criminalView.getMatriculaFuncAtu());
				// Par�grafo: fd2()
				senhaView.consultaMatricula(criminalView.getMatriculaFuncAtu());
				report.setJdigitador(jIndex, senhaView.getNome());
				report.setJquantidade(jIndex, jQuant);
				// report.setJtotal(report.getJtotal() + jQuant);
				jQuant = 0;
			}
			jQuant = jQuant + 1;
			report.setJquantidade(jIndex, jQuant);
			report.setJtotal(report.getJtotal() + 1);
			jMatric = criminalView.getMatriculaFuncAtu();
			if (report.getPageLine() == report.getPageSize())
				report.gravaRelatorio(1);
			// UtilBean.mensagemTexto("-" "STI   -  ");
			// RELATORIO
		}

		Scrp1600 scrp1600 = new Scrp1600(result, sessao);
		if (criminalView.registrosProcessados() == 0) {
			scrp1600.setMensagem("NENHUMA FICHA FOI CADASTRADA NESSE PERIODO.");
			scrp1600.executar(null, null, null, null);
		} else {

			if (senhaView.fimDados()) {
				report.gravaRelatorio(1);

				// RELATORIO
			}
			if (report.getPageLine() == report.getPageSize())
				report.gravaRelatorio(1);
			InputStreamDownload relatorio = report.imprimir();
			// sessao.setAtributo("relatorio", relatorio);
			// Relparam relparam = new Relparam(result, sessao);
			// Relatorioparam tela = new Relatorioparam();
			// tela.setTitulo("RELATORIO:FICHA INDICE CRIMINAL");
			// sessao.setAtributo("classe", "br.com.vti.sisp.controller.programa.Scrp1600");
			// relparam.executar(tela);
			return report.imprimir();
		}

		// UtilBean.mensagemTexto("-" "STI   -  ");

		scrp1600.executar(null, null, null, null);
		return null;
	}

	private void restaurarEstados(Relatorio prelatorio) {
		this.scrp1620Anterior = (Scrp1620) sessao.getAtributo("SCRP1620");
		if (prelatorio != null) {
			relatorio = prelatorio;
		} else {
			relatorio = this.scrp1620Anterior.relatorio;
		}

		faseproc = scrp1620Anterior.faseproc;

	}

}
